package com.woniuxy.woniufp.system.controller;

import com.woniuxy.woniufp.common.model.dto.bank.CardBindDTO;
import com.woniuxy.woniufp.common.model.dto.bank.SignatureDTO;
import com.woniuxy.woniufp.common.model.dto.user.UserLoginDto;
import com.woniuxy.woniufp.common.model.dto.user.UserRegistDto;
import com.woniuxy.woniufp.common.model.exceptions.BusinessException;
import com.woniuxy.woniufp.common.model.result.Result;
import com.woniuxy.woniufp.common.model.result.enums.IErrorCode;
import com.woniuxy.woniufp.common.model.vo.user.UserInfoVo;
import com.woniuxy.woniufp.common.model.vo.user.UserLoginVo;
import com.woniuxy.woniufp.system.entity.User;
import com.woniuxy.woniufp.system.entity.UserDetail;
import com.woniuxy.woniufp.system.service.IUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.util.HashMap;
import java.util.Map;

/**
 * 用户操作
 */
@RestController
@Slf4j
@Api(tags = "用户模块")
public class UserController {

    @Autowired
    IUserService userService ;
    /**
     * 用户的注册
     *  @Valid  验证注册信息的合法性  @Validated 一样
     * @param userRegistDto  注册信息的对象
     * @return
     */
    @PostMapping("/user/register")
    @ApiOperation("用户注册")
    public Result register(@RequestBody @Valid UserRegistDto userRegistDto){
        log.info("注册接收到的用户信息 : {}",userRegistDto);
        synchronized (userRegistDto.getPhone().intern()) {
            userService.regiter(userRegistDto);
        }
        return Result.ok(userRegistDto);
    }

    /**
     * 用户登录
     *  @Valid  验证验证信息的合法性  @Validated 一样
     * @param userLoginDto  登录信息
     * @return
     */
    @PostMapping("/user/login")
    @ApiOperation("用户登录")
    public Result<UserLoginVo> login(@RequestBody @Valid UserLoginDto userLoginDto){
        log.info("登录接收到的登录信息 : {}",userLoginDto);
        UserLoginVo userLoginVo = userService.login(userLoginDto);
        return Result.ok(userLoginVo);
    }

    /**
     * 用户绑卡
     * @param cardBindDTO
     * @return
     */
    @ApiOperation("用户绑卡")
    @PostMapping("/bank/card/add")
    public Result<SignatureDTO> addBankCount(@RequestBody CardBindDTO cardBindDTO){
        SignatureDTO signatureDTO = userService.createConsumer(cardBindDTO);
        return Result.ok(signatureDTO);
    }

    @GetMapping("/user/findById/{userId}")
    @ApiOperation("根据用户ID，查询用户信息")
    public Result<UserInfoVo> findById(@PathVariable("userId") Long userId){
        //用户id、用户编码、用户名、身份证号码
        UserInfoVo user = userService.findById(userId);

        return Result.ok(user);
    }



}
